 const express = require('express')
 const app = express()
 //post提交需要使用body-parser
 const bodyParser = require('body-parser')
 app.use(bodyParser.json())
 //引入tools工具
 const tools = require('./utils/tools')
 //导入数据库mongodb模块
 const mongodb = require('mongodb')
 //引入封装好的db
 const db = require('./utils/db.js')
 

 //发送验证码
 app.post('/sendCode',async (req,res)=>{
     try {
         //1、接受Login.vue发送的数据(phoneCode)
         //2、验证该手机号是否在指定的时间内发送过验证码 
            //1、发送过 提示，请不要频繁发送验证码，请在XXX秒以后再次发送。
            //2、未发送过  发送
         const phoneCode = req.body.phoneCode
       
         const codeInfo = await db.findOne('userCodeList',{
             phoneCode
         })
        //  console.log(111,codeInfo)
         //判断codeInfo是否有值
         if(codeInfo){  //有值
             //判断验证码是否过期
             const time = Date.now() - codeInfo.sendTime
             if(time > 2 * 1000){   //频繁登录退出会进行限制
                 //过期了 重新发送
                 const code = tools.getRandom(100000,999999)
                 //更新发送的 验证码 以及发送的时间
                 await db.updateOne('userCodeList',{phoneCode},{
                      $set:{
                        code,
                        sendTime:Date.now()
                    }
                 })           
                // await tools.sendCode(phoneCode,code)
                // tools.json(res,1,'发送验证码成功')
                      res.json({
                        ok:1,
                        code,
                        msg:"发送验证码成功"
                    })     
              }
             else{
                 //提示不要发送太频繁 
                   tools.json(res,-1,"请不要发送太频繁。请在"+(30-Number.parseInt(time/1000))+"秒以后再次发送")         
             }
         }
         else{   //没有值  发送你的验证码
             const code = tools.getRandom(100000,999999);
             await db.insertOne("userCodeList",{
                code,
                phoneCode,
                sendTime:Date.now()
            });
            //  await tools.sendCode(phoneCode,code);
            //  tools.json(res,1,code,"发送验证码成功");
            res.json({
                ok:1,
                code,
                msg:"发送验证码成功"
            })       
         }
     }  
     catch(msg){
         res.json({
            ok:-1,
            msg
        })
     }   
 })
 //登陆 
 app.post('/login', async (req,res)=>{
     //接受参数,进行手机号码的验证
        //去短信集合中查找是否有匹配的
//            1、有匹配
//               1、验证验证码是否过期。
//                  1、过期：提示验证码失败
//                  2、不过期：
//                    1、用户集合当中查找该用户是否登陆过。
//                        1、未登陆过，增加一条用户信息
//                        2、登陆过，更新一下用户信息。
//           2、无匹配，直接返回验证码错误*/
     const{ phoneCode,code } = req.body
     
      //去短信集合中查找是否有匹配的
     const codeInfo = await db.findOne('userCodeList',{
         phoneCode,
         code:code/1,
     })
     if(codeInfo){
         //1、有匹配
             //1、验证验证码是否过期
                   //1、过期：提示验证码失败
             if(Date.now() - codeInfo.sendTime > 30 * 1000){
                 tools.json(res, 2, '验证码失效了') 
             }
             else{
                  // 2、不过期
                        //1、用户集合当中查找该用户是否登陆过。
                    const userInfo = await db.findOne('userList',{
                        phoneCode
                    })
                           //1、登陆过，更新一下用户信息。
                      if(userInfo){
                          await db.updateOne('userList',{
                              phoneCode
                          },{
                              $set:{lastTime:Date.now()}
                          })
                      }
                           //2、未登陆过，增加一条用户信息
                      else{
                          await db.insertOne('userList',{
                              phoneCode,
                              regTime:Date.now(),
                              lastTime:Date.now()
                          })
                      }  
                      res.json({
                          ok:1,
                          token:tools.encode({
                             phoneCode
                           }),
                          msg:'登陆成功'
                      })     
             }
     }
     else{
         //2、无匹配，直接返回验证码错误*/
            tools.json(res, -1, '验证码错误')
     }    
 })


 app.listen('8090',()=>{
     console.log('success')
 })